<template>
	<view>
		<view v-for="(item, index) in configData" :key="index" class="padding-0 margin-0">
			<view v-if="item.editors  && item.editors.length">
				<om-autoform-outer v-if="hasValue(item.isShow)?(item.isShow?item.isShow:false):true"
					:required="item.required" :title="item.title" :subTitle="item.subTitle" :collapse="item.collapse"
					:issub="item.issub" :order="item.order" :length="item.length || 0" :showLength="item.showLength"
					:showButton="item.showButton" @buttonLink='buttonLink(item)' :buttonText="item.buttonText"
					class="padding-0 margin-0">
					<uni-list v-for="(editor, editorIndex) in item.editors" :key="editorIndex">
						<!-- 单行文本框控件 -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="false" v-if="editor.type == 'textbox'">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :showEditIcon="boolCheckedit(editor)" :label="tranferTitle(editor)"
										:required="editor.required" :necessaryBeforeSend="editor.necessaryBeforeSend">
									</om-label>
								</view>
								<view v-if="editor.prefix" :class="'tui-col-'+ (editor.prefixCol || '1')">
									{{editor.prefix}}</view>
								<view v-if="boolEdit(editor)" :class="'tui-col-' + getCol(editor)">
									<input @blur="textInput" :data-key="editor.key" :data-name="editor.valueField"
										:data-verifyfunc="editor.verifyfunc" :data-onselect="editor.onSelect"
										v-model="formdata[editor.nameField || editor.valueField]"
										:placeholder="editor.prompt" />
								</view>
								<view v-else :class="'tui-col-' + getCol(editor)">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
								<view v-if="editor.suffix" :class="'tui-col-'+ (editor.suffixCol || '1')">
									{{editor.suffix}}</view>
							</view>
						</uni-list-item>
						<!-- 文本域控件 -->
						<uni-list-item :showClear="editor.disabled?false:boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="false" v-if="editor.type == 'textarea'">
							<view v-if="editor.isfull" class="flex align-center">
								<view v-if="item.editors.length > 1">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" :class="'tui-col-' + getCol(editor)">
									<textarea @input="textareaInput($event,editor)" :maxlength="editor.max || -1"
										auto-height
										@blur="textareaBlur(editor)"
										:style="{'line-height':'16px','max-width':'290px','margin-top':(editor.max?'20px ':'0')}"
										v-model="formdata[editor.nameField || editor.valueField || editor.prompt]"
										:adjust-position="true" :focus="editor.focus || false"
										:disabled="editor.disabled" :placeholder="editor.prompt" />
									<view v-if="editor.max" class="" style="text-align:right;">
										{{(formdata[editor.nameField || editor.valueField || editor.prompt]?formdata[editor.nameField || editor.valueField || editor.prompt].length:0) +'/'+editor.max}}
									</view>
								</view>
								<view v-else style="white-space:pre-wrap;">
									<textarea @input="textareaInput($event,editor)" :maxlength="editor.max || -1"
										auto-height
										@blur="textareaBlur(editor)"
										:style="{'line-height':'16px','max-width':'290px','margin-top':(editor.max?'20px ':'0')}"
										v-model="formdata[editor.nameField || editor.valueField || editor.prompt]"
										:adjust-position="true" :focus="editor.focus || false" :disabled="true"
										:placeholder="editor.prompt" />
									<view v-if="editor.max" class="" style="text-align:right;">
										{{(formdata[editor.nameField || editor.valueField || editor.prompt]?formdata[editor.nameField || editor.valueField || editor.prompt].length:0) +'/'+editor.max}}
									</view>
								</view>
							</view>
							<view v-else class="flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="editor.prefix" :class="'tui-col-'+ (editor.prefixCol || '1')">
									{{editor.prefix}}</view>
								<view v-if="boolEdit(editor)" :class="'tui-col-' + getCol(editor)">
									<textarea @input="textareaInput($event,editor)" :maxlength="editor.max || -1"
										auto-height
										@blur="textareaBlur(editor)"
										:style="{'line-height':'18px','max-width':' 170px','padding-top':'2px','margin-top':(editor.max?'20px ':'0')}"
										v-model="formdata[editor.nameField || editor.valueField || editor.prompt]"
										:focus="editor.focus || false" :disabled="editor.disabled"
										:placeholder="editor.prompt" />
									<view v-if="editor.max" class="" style="text-align:right;">
										{{(formdata[editor.nameField || editor.valueField || editor.prompt]?formdata[editor.nameField || editor.valueField || editor.prompt].length:0) +'/'+editor.max}}
									</view>
								</view>
								<view style="white-space:pre-wrap;" v-else :class="'tui-col-' + getCol(editor)">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
								<view v-if="editor.suffix" :class="'tui-col-'+ (editor.suffixCol || '1')">
									{{editor.suffix}}</view>
							</view>
						</uni-list-item>
						<uni-list-item v-if="editor.type == 'richtextbox'" :showArrow="false">
							<om-richtext :nodes="editor.defaultValue"></om-richtext>
						</uni-list-item>
						<!-- 标签显示框 -->
						<uni-list-item :showArrow="editor.showArrow?editor.showArrow:false"
							@click="(editor.showArrow?labelLink(item.key,editor):'')" v-if="editor.type == 'labelbox'">
							<view v-if="editor.isfull">
								<view v-if="item.editors.length > 1">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view style="white-space:pre-wrap">
									{{ formdata[editor.nameField || editor.valueField] }}
								</view>
							</view>
							<view v-else class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend" :label="editor.title">
									</om-label>
								</view>
								<view v-if="editor.prefix" :class="'tui-col-'+ (editor.prefixCol || '1')">
									{{editor.prefix}}</view>
								<view v-if="editor.computed" class="tui-left" :class="'tui-col-' + getCol(editor)">
									{{calcEditorValue(editor)}}
								</view>
								<view style="white-space:pre-wrap" v-else class="tui-left"
									:class="'tui-col-' + getCol(editor)">
									{{formdata[editor.nameField || editor.valueField]}}
								</view>
								<view v-if="editor.suffix" :class="'tui-col-'+ (editor.suffixCol || '1')">
									{{editor.suffix}}</view>
							</view>
						</uni-list-item>
						<!-- 带小数点的数值框控件 -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="false" v-if="editor.type == 'numberbox' && editor.digit">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="editor.prefix" :class="'tui-col-'+ (editor.prefixCol || '1')">
									{{editor.prefix}}</view>
								<view v-if="boolEdit(editor)" class="tui-left" :class="'tui-col-' + getCol(editor)">
									<input
										style=" height: 25px;line-height: 25px; text-align:right;vertical-align:bottom;"
										@blur="numberInput" :data-name="editor.valueField"
										@input="watchInput($event,editor)"
										:start="editor.min || editor.startField" :end="editor.max || editor.endField"
										:data-precision="editor.precision" :data-verifyfunc="editor.verifyfunc"
										:data-onselect="editor.onSelect" type="digit"
										v-model="formdata[editor.nameField || editor.valueField]" :placeholder="editor.prompt" />
								</view>
								<view v-else class="tui-left" :class="'tui-col-' + getCol(editor)">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
								<view v-if="editor.suffix" :class="'tui-col-'+ (editor.suffixCol || '1')">
									{{editor.suffix}}</view>
							</view>
						</uni-list-item>
						<!-- 整数数值框控件 -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="false" v-if="editor.type == 'numberbox' && !editor.digit">
							<view class="tui-flex align-center">
								<view v-show="editor.isShowTips&&isfocus" class="numberbox-tips">
									<view class="numberbox-tips-text">{{editor.tips}}</view>
									<view class="numberbox-container"></view>
								</view>
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="editor.prefix" :class="'tui-col-'+ (editor.prefixCol || '1')">
									{{editor.prefix}}</view>
								<view v-if="boolEdit(editor)" class="tui-left" :class="'tui-col-' + getCol(editor)">
									<input
										style=" height: 25px;line-height: 25px; text-align:right;vertical-align:bottom;"
										@blur="numberInput" @focus="changeShow" :start="editor.min || editor.startField"
										@input="watchInput($event,editor)"
										:end="editor.max || editor.endField" :data-precision="editor.precision"
										:data-name="editor.valueField" :data-verifyfunc="editor.verifyfunc"
										:data-onselect="editor.onSelect" type="number"
										v-model="formdata[editor.valueField]" :placeholder="editor.prompt" />
								</view>
								<view v-else class="tui-left" :class="'tui-col-' + getCol(editor)">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
								<view v-if="editor.suffix" style="line-height: 25px"
									:class="'tui-col-'+ (editor.suffixCol || '1')">{{editor.suffix}}</view>
							</view>
						</uni-list-item>
						<!-- 判断控件（switch） -->
						<uni-list-item :showArrow="false" v-if="editor.type == 'switchbox' && !editor.digit">
							<view class="tui-flex">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									<switch :disabled="editor.disabled || false" @change="switchChange"
										:data-name="editor.valueField"
										:class="formdata[editor.nameField || editor.valueField]?'checked':''"
										:checked="formdata[editor.valueField]?true:false"></switch>
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] ? "√":""}}</view>
							</view>
						</uni-list-item>
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="boolEdit(editor)" v-if="editor.type == 'datebox'">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									<!-- #ifdef APP-PLUS -->
									<picker mode="date" @change="dateChange" :data-key="editor.key"
										:data-name="editor.valueField" :data-verifyfunc="editor.verifyfunc"
										:data-onselect="editor.onSelect" :value="formdata[editor.valueField]">
										<view>{{formdata[editor.nameField || editor.valueField] || editor.prompt}}
										</view>
									</picker>
									<!-- #endif -->
									<!-- #ifndef APP-PLUS -->
									<picker mode="date" @change="dateChange($event,editor,formdata[editor.startField])"
										:start="editor.min || (editor.startField?(formdata[editor.startField]):'')"
										:end="editor.max || (editor.endField?(formdata[editor.endField]):'')"
										:data-key="editor.key" :data-name="editor.valueField"
										:data-verifyfunc="editor.verifyfunc" :data-onselect="editor.onSelect"
										:value="formdata[editor.valueField]">
										<view>{{formdata[editor.nameField || editor.valueField] || editor.prompt}}
										</view>
									</picker>
									<!-- #endif -->
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] || ""}}</view>
							</view>
						</uni-list-item>
						<!-- 时间控件（timebox） -->
						<uni-list-item :showHover="false" :showClear="boolShowClear(editor)"
							@iconClear="clearFunc(editor)" :showArrow="boolEdit(editor)"
							v-if="editor.type == 'timebox'">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									<!-- <switch @change="switchChange" :data-name="editor.valueField" :class="formdata[editor.valueField]?'checked':''" :checked="formdata[editor.valueField]?true:false"></switch> -->
									<uni-datetime-picker ref="timePicker" :editorTitle="editor.title" :type="'time'"
										:hideSecond="true" @change="timeChange($event,editor.valueField)"
										:start="editor.min || (editor.startField?(formdata[editor.startField]):'')"
										:end="editor.max || (editor.endField?(formdata[editor.endField]):'')"
										:data-name="editor.valueField" :data-verifyfunc="editor.verifyfunc"
										:data-onselect="editor.onSelect"
										:value="editor.min || formdata[editor.valueField]">
										<view>{{formdata[editor.nameField || editor.valueField] || editor.prompt}}
										</view>
									</uni-datetime-picker>
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] ? "√":""}}</view>
							</view>
						</uni-list-item>
						<!-- 日期控件（datebox） -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="boolEdit(editor)" v-if="editor.type == 'newdatebox'"
							@click="datetimeClick(editor)">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] || '请选择' }}
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] || ""}}</view>
							</view>
						</uni-list-item>
						<!-- 时间控件（timebox） -->
						<uni-list-item :showHover="false" :showClear="boolShowClear(editor)"
							@iconClear="clearFunc(editor)" :showArrow="boolEdit(editor)"
							v-if="editor.type == 'newtimebox'" @click="datetimeClick(editor)">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] || '请选择' }}
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField]}}</view>
							</view>
						</uni-list-item>
						<!-- 日期时间控件（datetimebox） -->
						<uni-list-item :showHover='false' :showClear="boolShowClear(editor)"
							@iconClear="clearFunc(editor)" :showArrow="boolEdit(editor)"
							v-if="editor.type == 'newdatetimebox'" @click="datetimeClick(editor)">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] || '请选择' }}
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
							</view>
						</uni-list-item>
						<uni-list-item :showHover='false' :showClear="boolShowClear(editor)"
							@iconClear="clearFunc(editor)" :showArrow="boolEdit(editor)" v-if="editor.type == 'areabox'"
							@click="areaClick(editor)">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] || '请选择' }}
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
							</view>
						</uni-list-item>
						<uni-list-item :showHover='false' :showClear="boolShowClear(editor)"
							@iconClear="clearFunc(editor)" :showArrow="boolEdit(editor)" v-if="editor.type == 'areaoutsidebox'"
							@click="areaOutsideClick(editor)">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] || '请选择' }}
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
							</view>
						</uni-list-item>
						<uni-list-item :showHover='false' :showClear="boolShowClear(editor)"
							@iconClear="clearFunc(editor)" :showArrow="boolEdit(editor)" v-if="editor.type == 'countrybox'"
							@click="countryClick(editor)">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] || '请选择' }}
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
							</view>
						</uni-list-item>
						<!-- 日期时间控件（datetimebox） -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearDatetime(editor)"
							:showArrow="boolEdit(editor)" v-if="editor.type == 'datetimebox'">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7">
									<picker mode="multiSelector" @change="datetimeChange"
										@columnchange="datetimecolumnchange"
										:range="pickerData[editor.valueField]?pickerData[editor.valueField].dateTimeArray:[]"
										:data-name="editor.valueField" :data-onselect="editor.onSelect"
										:data-verifyfunc="editor.verifyfunc"
										:value="pickerData[editor.valueField]?pickerData[editor.valueField].dateTime:''">
										<view>{{formdata[editor.valueField]?formdata[editor.valueField]:editor.prompt}}
										</view>
									</picker>
								</view>
								<view v-else class="tui-right tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
							</view>
						</uni-list-item>
						<!-- 单选下拉框 -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="boolEdit(editor)" v-if="editor.type == 'selectbox'">
							<view v-if="editor.isfull">
								<view class="tui-flex  align-center">
									<view class="tui-col-5">
										<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
											:showEditIcon="boolCheckedit(editor)" :required="editor.required">
										</om-label>
									</view>
									<view v-if="boolEdit(editor)" class="tui-left tui-col-7">
										<picker @change="selectChange" mode="selector" :data-name="editor.valueField"
											:data-key="item.key" :data-verifyfunc="editor.verifyfunc"
											:data-onselect="editor.onSelect" :range="editor.data"
											:value="pickerData[editor.valueField]?pickerData[editor.valueField].index:0"
											range-key="text">
											<view class="tui-right">
												{{ (editor.data.length && pickerData[editor.valueField] && ~pickerData[editor.valueField].index) ? editor.data[pickerData[editor.valueField].index].text : '请选择' }}
											</view>
										</picker>
									</view>
									<view v-else class="tui-left tui-col-7">
										{{ formdata[editor.nameField || editor.valueField] }}
									</view>
								</view>
							</view>
							<view v-else>
								<view class="tui-flex  align-center">
									<view class="tui-col-5">
										<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
											:showEditIcon="boolCheckedit(editor)" :label="editor.title"
											:required="editor.required"></om-label>
									</view>
									<view v-if="boolEdit(editor)" class="tui-left tui-col-7">
										<picker @change="selectChange" mode="selector" :data-name="editor.valueField"
											:data-key="item.key" :data-verifyfunc="editor.verifyfunc"
											:data-onselect="editor.onSelect" :range="editor.data"
											:value="pickerData[editor.valueField]?pickerData[editor.valueField].index:0"
											range-key="text">
											<view class="tui-right">
												{{ (editor.data.length && pickerData[editor.valueField] && ~pickerData[editor.valueField].index) ? editor.data[pickerData[editor.valueField].index].text : '请选择' }}
											</view>
										</picker>
									</view>
									<view v-else class="tui-left tui-col-7">
										{{ formdata[editor.nameField || editor.valueField] }}
									</view>
								</view>
							</view>
						</uni-list-item>
						<!-- 多列下拉框 -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="boolEdit(editor)" v-if="editor.type == 'multipicker'">
							<view class="tui-flex  align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-left tui-col-7">
									<picker mode="multiSelector" @change="multiChange($event,editor.data)"
										@columnchange="bindMultiPickerColumnChange($event,editor.data)"
										:value="multiIndex" range-key="text" :range="editor.data"
										:data-name="editor.valueField" :data-onselect="editor.onSelect"
										:data-key="item.key">
										<view class="tui-right">
											{{formdata[editor.valueField]?formdata[editor.nameField]:'请选择'}}
										</view>
									</picker>
								</view>
								<view v-else class="tui-left tui-col-7">
									{{ formdata[editor.nameField || editor.valueField] }}
								</view>
							</view>
						</uni-list-item>
						<!-- 可输可选 -->
						<uni-list-item :custom="boolEdit(editor)" :showArrow="boolEdit(editor)"
							v-if="editor.type == 'editselectbox'">
							<view v-if="boolEdit(editor)">
								<uni-combox @input="selectInput(editor)" :label="tranferTitle(editor)"
									labelWidth="41.6666667%" :showEditIcon="boolCheckedit(editor)"
									:required="editor.required" :candidates="editor.data" :placeholder="editor.prompt"
									v-model="formdata[editor.valueField]">
								</uni-combox>
							</view>
							<view v-else class="flex">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend" :label="editor.title">
									</om-label>
								</view>
								<view class="tui-col-7">{{formdata[editor.nameField || editor.valueField]}}</view>
							</view>
						</uni-list-item>
						<!-- 跳页可输可选 -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="boolEdit(editor)" v-if="editor.type == 'editlinkbox'"
							@click="editSearchRemark(editor)">
							<view class="flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="tranferTitle(editor)"
										:required="editor.required"></om-label>
								</view>
								<view v-if="editor.prefix" :class="'tui-col-'+ (editor.prefixCol || '1')">
									{{editor.prefix}}</view>
								<view v-if="boolEdit(editor)" style="text-align: end;"
									:class="'tui-col-' + getCol(editor) ">
									{{ formdata[editor.nameField || editor.valueField] || editor.prompt }}
								</view>
								<view v-else :class="'tui-col-' + getCol(editor)">
									{{ formdata[editor.nameField || editor.valueField] }}</view>
								<view v-if="editor.suffix" :class="'tui-col-'+ (editor.suffixCol || '1')">
									{{editor.suffix}}</view>
							</view>
						</uni-list-item>
						<!-- 复选框下拉框 -->
						<uni-list-item :showArrow="false" v-if="editor.type == 'checkbox'">
							<view v-if="editor.isfull" class="tui-flex align-center">
								<view v-if="boolEdit(editor)" class="tui-left">
									<om-checkgroup @checkboxChange="checkboxChange($event,editor)" :list="editor.data"
										valueField="value" nameField="text" :formValueField="editor.valueField"
										:formNameField="editor.nameField">
									</om-checkgroup>
								</view>
								<view v-else class="tui-left">
									{{ formdata[editor.nameField || editor.valueField] }}
								</view>
							</view>
							<view v-else class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-left tui-col-7">
									<om-checkgroup @checkboxChange="checkboxChange($event,editor)" :list="editor.data"
										valueField="value" nameField="text" :formValueField="editor.valueField"
										:formNameField="editor.nameField">
									</om-checkgroup>
								</view>
								<view v-else class="tui-left tui-col-7">
									<om-checkgroup @checkboxChange="checkboxChange($event,editor)" :list="editor.data"
										valueField="value" nameField="text" :formValueField="editor.valueField"
										:formNameField="editor.nameField">
									</om-checkgroup>
								</view>
							</view>
						</uni-list-item>
						<!-- 多选下拉框 -->
						<uni-list-item :showClear="boolShowClear(editor)" @iconClear="clearFunc(editor)"
							:showArrow="boolEdit(editor)" v-if="editor.type == 'multilinkbox'">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view v-if="boolEdit(editor)" class="tui-right tui-col-7" @click="multiselectClick"
									:data-name="editor.valueField" :data-key="item.key">
									{{formdata[editor.nameField || editor.valueField] || '请选择'}}
								</view>
								<view v-else class="tui-right tui-col-7">
									{{formdata[editor.nameField || editor.valueField] || ''}}
								</view>
							</view>
						</uni-list-item>
						<!-- 跳转选择控件 -->
						<uni-list-item :showHover="false" :showClear="boolShowClear(editor)"
							@iconClear="clearFunc(editor)" :showArrow="boolEdit(editor)"
							v-if="editor.type == 'linkbox'">
							<view v-if="editor.isfull">
								<view class="tui-flex align-center" @click="linkFunc" :data-name="editor.valueField"
									:data-key="item.key">
									<view v-if="boolEdit(editor)" class="tui-left tui-col-7">
										{{formdata[editor.nameField || editor.valueField] || '请选择'}}
									</view>
									<view v-else class="tui-left tui-col-7">
										{{formdata[editor.nameField || editor.valueField] || ''}}
									</view>
								</view>
							</view>
							<view v-else-if="editor.isSearchUser">
								<view class="tui-flex align-center">
									<view class="tui-col-5">
										<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
											:showEditIcon="boolCheckedit(editor)" :label="editor.title"
											:required="editor.required"></om-label>
									</view>
									<view v-if="boolEdit(editor)" class="tui-left tui-col-7" @click.stop="linkFunc"
										:data-name="editor.valueField" :data-value="editor.nameField"
										:data-key="item.key">
										<view style="width:100%;display: flex;"
											v-if="formdata[editor.nameField || editor.valueField]">
											<view @click.stop="showAllUser(editor.nameField,editor.valueField)"
												v-if="isOVer(editor.nameField)" class="margin-top-xs"
												style="display: flex; flex-direction:column;align-items: center;">
												<view class="om-btn-color"
													style="margin-left: 60rpx;color: #ffffff;font-size: 28rpx; width:80rpx;height:80rpx;display: flex; align-items: center;justify-content: center;">
													全部
												</view>
												<text style="font-size: 25rpx;margin-left: 60rpx;">
													查看全部
												</text>
											</view>
											<view class="margin-top-xs"
												v-for="(item,index) of getlinkData(editor.nameField,editor.valueField)"
												:key="index"
												style="display: flex; flex-direction:column;align-items: center; justify-content: flex-start;">
												<view v-if="item.show" class="om-btn-color"
													style=" margin-left: 60rpx; position: relative;color: #ffffff;font-size: 28rpx; width:80rpx;height:80rpx;display: flex; align-items: center;justify-content: center;">
													{{item.sortName}}
													<image src="/static/images/others/delete1.png"
														@click.stop="userItemClick(editor.nameField,editor.valueField,index)"
														:type="'clear'" :color="'#666666'" size="18"
														style="width:40rpx;height:40rpx;border-radius:20rpx; position: absolute;top:-10rpx;right: -15rpx;" />
												</view>
												<text v-if="item.show" style="font-size: 25rpx;margin-left: 60rpx;">
													{{item.name}}
												</text>
											</view>
										</view>
										<view v-else class="">
											请选择
										</view>
									</view>
									<view v-else class="tui-left tui-col-7">
										{{formdata[editor.nameField || editor.valueField] || ''}}
									</view>
								</view>
							</view>
							<view v-else>
								<view class="tui-flex align-center">
									<view class="tui-col-5">
										<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
											:showEditIcon="boolCheckedit(editor)" :label="editor.title"
											:required="editor.required"></om-label>
									</view>
									<view v-if="boolEdit(editor)" class="tui-right tui-col-7" @click="linkFunc"
										:data-name="editor.valueField" :data-key="item.key">
										{{formdata[editor.nameField || editor.valueField] || '请选择'}}
									</view>
									<view v-else class="tui-right tui-col-7">
										{{formdata[editor.nameField || editor.valueField] || ''}}
									</view>
								</view>
							</view>
						</uni-list-item>
						<!-- 文件查看 -->
						<uni-list-item :showArrow="false" v-if="editor.type == 'lookfilebox'">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view class="tui-left tui-col-7" v-if="showLookBtn(editor.valueField)">
									<button class="bg-blue" size="mini" @click="openFile(editor)">查看</button>
								</view>
							</view>
						</uni-list-item>
						<!-- 图片上传 -->
						<uni-list-item :showArrow="false" v-if="editor.type == 'avatarbox'">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view class="tui-left tui-col-7" v-if="avaLookBtn(editor.valueField)">
									<ot-upload-image :idObj="editor" :url="editor.uploadUrl" :limit="1"
										:formData="editor.formData" :file-list="editor.fileList"
										:name="editor.fileField || 'file'" @on-success="onUaSuccess"
										@on-error="onUaError" @on-remove="onUaRemove" @on-process="onUaProcess">
									</ot-upload-image>
								</view>
							</view>
						</uni-list-item>
						<!-- wen上传 -->
						<uni-list-item :showHover="false" :showArrow="false" v-if="editor.type == 'imagebox'">
							<om-label :necessaryBeforeSend="editor.necessaryBeforeSend" v-if="item.editors.length > 1"
								:showEditIcon="boolCheckedit(editor)" :label="editor.title" :required="editor.required">
							</om-label>
							<view class="cu-form-group padding-top">
								<view class="grid col-3 grid-square flex-sub">
									<view class="bg-img bg-img-2" v-for="(imageItem, imageIndex) in editor.tempFileList"
										:key="imageIndex" @tap="ViewImage(imageIndex, editor)">
										<image :src="getImageUrl(imageItem, editor)" mode="aspectFit"></image>
										<view v-if="boolEdit(editor)" class="cu-tag bg-red"
											@tap.stop="DelImg(imageIndex, editor)">
											<text class='cuIcon-close'></text>
										</view>
									</view>
									<view v-if="boolEdit(editor)" class="solids" @tap="ChooseImage(editor)">
										<text class='cuIcon-cameraadd'></text>
									</view>
								</view>
							</view>
						</uni-list-item>
						<!-- 文件上传 -->
						<!-- <uni-list-item :showHover="false" :showArrow="false" v-if="editor.type == 'filebox'">
						<view class="tui-flex align-center">
							<view class="tui-col-5"><om-label :showEditIcon="boolCheckedit(editor)" :label="editor.title" :required="editor.required"></om-label></view>
							<view 
								v-if="boolEdit(editor)" 
								class="tui-right tui-col-7">
								<uploader :options="editor.options" class="uploader-example">
								   <uploader-unsupport></uploader-unsupport>
								   <uploader-drop>
								     <uploader-btn>选择文件</uploader-btn>
								   </uploader-drop>
								   <uploader-list></uploader-list>
								 </uploader>
							</view>
							<view v-else class="tui-left tui-col-7">
								<button v-if="showLookBtn(editor.valueField || editor.nameField)" class="bg-blue" size="mini" @click="openFile(editor)">查看</button>
							</view>
						</view>
					</uni-list-item> -->
						<uni-list-item v-if="editor.type == 'filebox'" :showArrow="false" @iconClear="clearFunc(editor)"
							:showClear="false">
							<om-label :necessaryBeforeSend="editor.necessaryBeforeSend" v-if="item.editors.length > 1"
								:showEditIcon="boolCheckedit(editor)" :label="editor.title" :required="editor.required">
							</om-label>
							<view class="cu-form-group padding-top">
								<view class="grid col-3 grid-square flex-sub">
									<view class="bg-img bg-img-2" v-for="(imageItem, imageIndex) in editor.tempFileList"
										:key="imageIndex" @tap="ViewImage(imageIndex, editor)">
										<image :src="getImageUrl(imageItem, editor)" mode="aspectFit"></image>
										<view v-if="boolEdit(editor)" class="cu-tag bg-red"
											@tap.stop="DelImg(imageIndex, editor)">
											<text class='cuIcon-close'></text>
										</view>
									</view>
									<view v-if="boolEdit(editor)" class="solids" @tap="ChooseImage(editor)">
										<text class='cuIcon- cameraadd'></text>
									</view>
								</view>
							</view>
						</uni-list-item>
						<!-- 子表 -->
						<view v-if="editor.type == 'subbox'">
							<view class=""
								v-if="editor && editor.workList && (Object.prototype.toString.call(editor.workList)==='[object Array]')">
								<uni-list-item v-for="(subData, subIndex) in (editor.workList || [])" :key="subIndex"
									:avatar="subIndex + 1"
									:showArrow="(editor.showArrow != null && editor.showArrow != undefined)?editor.showArrow:true"
									:showBtn="editor.showBtn" @click="openSubData(subIndex, editor)"
									:showClear="boolDelSub(editor,subData)"
									@iconClear="delSubData(subIndex, editor)" :btnText="editor.btnTetx">
									<!-- #ifdef APP-PLUS -->
									<view v-if="editor.titleTemplate && subData"
										v-text="getTemplate(editor.titleTemplate,subData)"></view>
									<view v-if="editor.subtitle1Template && subData"
										class="text-gray text-sm padding-bottom-xs padding-top-xs"
										v-text="getTemplate(editor.subtitle1Template,subData)"></view>
									<view v-if="editor.subtitle2Template && subData"
										class="text-gray text-sm padding-bottom-xs padding-top-xs"
										v-text="getTemplate(editor.subtitle2Template,subData)"></view>
									<view v-if="editor.subtitle3Template && subData"
										class="text-gray text-sm padding-bottom-xs padding-top-xs"
										v-text="getTemplate(editor.subtitle3Template,subData)"></view>
									<!-- #endif -->
									<!-- #ifndef APP-PLUS -->
									<view v-if="editor.titleTemplate && subData">
										{{ _.template(editor.titleTemplate)(subData)}}</view>
									<view v-if="editor.subtitle1Template && subData"
										class="text-gray text-sm padding-bottom-xs padding-top-xs">
										{{ _.template(editor.subtitle1Template)(subData) }}</view>
									<view v-if="editor.subtitle2Template && subData"
										class="text-gray text-sm padding-bottom-xs padding-top-xs">
										{{ _.template(editor.subtitle2Template)(subData) }}</view>
									<view v-if="editor.subtitle3Template && subData"
										class="text-gray text-sm padding-bottom-xs padding-top-xs">
										{{ _.template(editor.subtitle3Template)(subData) }}</view>
									<!-- #endif -->
								</uni-list-item>
							</view>
							<view style="font-size: 15px; text-align: center;" class="" v-if="editor.subBottomTitle">
								{{editor.subBottomTitle}}</view>
							<view v-if="boolEditSub(editor)" class="tui-flex align-center justify-center padding-top padding-bottom-sm">
								<text class="lg text-green cuIcon-add"
									@click="openSubData('', editor)">{{ '增加' + (editor.title || item.title) }}</text>
							</view>
						</view>
						<view v-if="editor.type == 'chartbox'" >
							<uni-list-item :showArrow="false" v-for="(itemData,index) in editor.workList" :key="index">
								<!-- <view class="" style="display:flex;justify-content:space-around;">
						 	<view  class="" v-for="(btnItem,btnIndex) in itemData.button" :key="btnIndex">
						 		<button  type="primary" size="mini" @click="changeType(itemData,btnItem.type)">{{btnItem.title}}</button>
						 	</view>
						 </view> -->
								<view
									style="width:80px;border-bottom: 1px solid #1890FF;position: absolute; right: 0;top: 5px;">
									<om-combox style="font-size: 10px;" :status="false" label="" labelWidth="100px"
										@changeValue="changeIndex(arguments,itemData)" :candidates="itemData.listTitle"
										placeholder="请选择图表类型"></om-combox>
								</view>
								<text style="font-size: 10px; margin-top: 35px;">{{itemData.name}}
									<text style="margin-left: 40px;">{{itemData.title}}</text>
								</text>
								<om-ucharts :chartType="itemData.type" :opts="itemData" :canvasId="'canvas'+index">
								</om-ucharts>
							</uni-list-item>
						</view>
						<view class="" v-if="editor.type == 'opickerbox'">
							<uni-list-item @click="pickerClick" :showHover="false" :showClear="boolShowClear(editor)"
								@iconClear="clearFunc(editor)" :showArrow="boolEdit(editor)">
								<view class="tui-flex align-center">
									<view class="tui-col-5">
										<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
											:showEditIcon="boolCheckedit(editor)" :label="editor.title"
											:required="editor.required"></om-label>
									</view>
									<view v-if="boolEdit(editor)" class="tui-right tui-col-7"
										:data-name="editor.valueField" :data-key="item.key">
										{{formdata[editor.nameField || editor.valueField] || '请选择'}}
									</view>
									<view v-else class="tui-left tui-col-7">
										{{ formdata[editor.nameField || editor.valueField] }}
									</view>
									<uni-popup @change="popchange(formdata[editor.nameField || editor.valueField])"
										:mask-click="false" ref="popup" :type="'bottom'">
										<om-picker ref="ompicker"
											:initValue="formdata[editor.nameField || editor.valueField]"
											:initIndex="editor.initIndex" @cancel="pickerCancel"
											@confirm="pickerConfirm(arguments,editor)"
											:showDetailOne="editor.showDetail1" :showDetailTwo="editor.showDetail2"
											:dataList="editor.data"></om-picker>
									</uni-popup>
								</view>
							</uni-list-item>
						</view>
						<uni-list-item :showArrow="false" v-if="editor.type == 'routerbox'">
							<view class="tui-flex align-center">
								<view class="tui-col-5">
									<om-label :necessaryBeforeSend="editor.necessaryBeforeSend"
										:showEditIcon="boolCheckedit(editor)" :label="editor.title"
										:required="editor.required"></om-label>
								</view>
								<view class="tui-right tui-col-7">
									<button class="bg-blue" size="mini" @click="routerTo(editor)">查看</button>
								</view>
							</view>
						</uni-list-item>
					</uni-list>
					</uni-list>
					<om-white-space bgColor="#eee"></om-white-space>
				</om-autoform-outer>
			</view>
		</view>
		<uni-popup ref="datetimepop" :type="'bottom'" style="z-index: 999;">
			<om-date-time @confirm="dateTimeConfirm(arguments)" :dateTimeEditor='dateTimeEditor'
				@cancel='dateTimeCancel' :datetime="formdata[dateTimeEditor.nameField || dateTimeEditor.valueField]">
			</om-date-time>
		</uni-popup>
		<uni-popup ref="datepop" :type="'bottom'">
			<om-date @confirm="dateTimeConfirm(arguments)" :dateTimeEditor='dateTimeEditor' @cancel='dateTimeCancel'
				:minDate="dateTimeEditor.minDate "
				:datetime="formdata[dateTimeEditor.nameField || dateTimeEditor.valueField]">
			</om-date>
		</uni-popup>
		<uni-popup ref="timepop" :type="'bottom'">
			<om-time @confirm="dateTimeConfirm(arguments)" :dateTimeEditor='dateTimeEditor' @cancel='dateTimeCancel'
				:datetime="formdata[dateTimeEditor.nameField || dateTimeEditor.valueField]">
			</om-time>
		</uni-popup>
		<uni-popup ref="areapop" :type="'bottom'">
			<om-area @cancle="areaCancle" @selected='areaSelected(arguments)' :areaEditor='areaEditor'
				:areaString="formdata[areaEditor.nameField || areaEditor.valueField]">
			</om-area>
		</uni-popup>
		<uni-popup ref="areaOutsidepop" :type="'bottom'">
			<om-area-outside @cancle="areaOutsideCancle" @selected='areaOutsideSelected(arguments)' :areaOutsideEditor='areaOutsideEditor'
				:areaOutsideString="formdata[areaOutsideEditor.nameField || areaOutsideEditor.valueField]">
			</om-area-outside>
		</uni-popup>
		<view class="showCountryPopup" v-show="showCountry">
			<ot-tree-dshow :showCancel="true" :showConfirm="true" ref="ottree" :range="countryList" rangeKey="text" @cancel="countryCancel" @confirm="countryConfirm"></ot-tree-dshow>
		</view>
		<!-- #ifdef APP || APP-PLUS || APP-NVUE || APP-PLUS-NVUE || APP-VUE -->
		<ot-authpup ref="authpup" type="top" @changeAuth="changeAuth" :permissionID="permissionID"></ot-authpup>
		<!-- #endif -->
	</view>
</template>

<script>
	import dateTimePicker from '@/static/js/dateTimePicker.js';
	import moment from '@/static/js/moment.js';
	import {
		getUrl,
		confirmModal
	} from '@/static/js/common.js'
	import {
		hasValue,
		formValidation,
		getWorkCacheKey
	} from '@/static/js/formUtil.js'
	import {useLoginUserStore} from '@/stores/login-user.js';
	// import Vue from 'vue'
	// import uploader from '@/vue-simple-uploader'

	// Vue.use(uploader)
	/**
	 * 常用方法：
	 * 1）修改编辑器属性值： changeEditor(key, valueField, editorKey, newValue) 
	 * 2）	修改分组属性值：	changeConfigAttr(key, configKey, newValue) 
	 * 3）		获取编辑器：	getEditor(key, valueField)
	 * 4）	获取编辑器标题：	getEditorTitle(key, valueField)
	 * 5）	编辑器是否存在：	hasEditor(key, valueField)
	 * 6）	  分组是否存在： hasGroupKey(key)
	 * 7）初始化下拉框索引： initSelectIndex(key, valueField, value)
	 * 8）	清空编辑器的值： clear(key, valueField)
	 * 9）		插入编辑器： insertAfterEditor(key, afterValueField, editor) 分组key、插入点（之后）、要插入的编辑器
	 * 10）		删除编辑器： removeEditor(key, valueField)
	 */

	export default {
		props: {
			initConfigData: {
				type: Array,
				default () {
					return [];
				}
			},
			//表单初始值
			initValue: {
				type: Object,
				default () {
					return {};
				}
			}
		},
		provide() {
			return {
				form: this
			}
		},
		inject: ['formPage'],
		data() {
			return {
				configData: [],
				formdata: {},
				pickerData: {}, //下拉框修改触发器
				dataMap: {},
				changeDate: {
					year: '',
					month: ''
				},
				isfocus: false,
				chartType: '',
				imgHeight: '',
				imgWidth: '',
				multiIndex: [0, 0, 0],
				newUpload: false,
				dateTimeEditor: {},
				areaEditor: {},
				option: {},
				permissionID: 'CAMERA',
				showCountry: false,
				countryList: [],
				areaOutsideEditor: {},
			};
		},
		watch: {
			initValue: {
				handler(newValue, oldValue) {
					this.setInitValue()
				},
				deep: true
			},
			initConfigData: {
				handler(newValue, oldValue) {
					this.configData = this._.cloneDeep(newValue)
					this.setInitValue()
				},
				deep: true
			},
			configData: {
				handler(newValue, oldValue) {
					this.init();
				},
				deep: true
			},
			formdata: {
				handler(newValue, oldValue) {
					Object.assign(this.formPage.formdata, newValue)
				},
				deep: true
			}
		},
		created() {
			this.initData()
		},
		computed: {
			isOVer() {
				return function(idStr) {
					let nameList = []
					nameList = this.formdata[idStr].split(',')
					if (nameList.length >= 3) {
						return true
					} else {
						return false
					}
				}
			},
			getlinkData() {
				return function(nameStr, idStr) {
					let objList = [],
						nameList = this.formdata[nameStr].split(','),
						idList = (this.formdata[idStr] + '').split(',')
					if (this.formdata[idStr]) {
						for (let index in idList) {
							let obj = {
								id: idList[index],
								name: nameList[index],
								sortName: nameList[index].substr(nameList[index].length - 2, nameList[index]
									.length),
								show: nameList.length > 2 ? (index == nameList.length - 1 ? true : false) : true
							}
							objList.push(obj)
						}
					}
					return objList
				}
			}
		},
		methods: {
			subTemplate(data1) {
				return this._.template(data1)
			},
			showSubTemplate(item, str) {
				if (hasValue(item[str])) {
					return item[str]
				} else {
					return true
				}
			},
			hasValue(value) {
				return hasValue(value)
			},
			changeIndex(info, itemData) {
				this.$set(itemData, "type", itemData.listValue[info[1]])
			},
			getTemplate(m, n) {
				let arr = ''; //定义变量
				let arrs = ''; //返回结果
				if (Object.prototype.toString.call(n) == '[object Object]') {
					for (var i in n) {
						if ((n[i] + '').indexOf('<') == -1) {
							if (n[i]) {
								arr = arr + "let " + i + "='" + (n[i] + '').replace(/[\'\"\\\/\b\f\n\r\t]/g, '') + "';";
							} else {
								arr = arr + "let " + i + "='';";
							}
						}
					}
				}
				//判断模板的数量
				let num = (m.split('<%=')).length - 1;
				if (num > 1) {
					//获取模板数组
					let jsonarr = m.split('%>');
					if (Object.prototype.toString.call(jsonarr) == '[object Array]') {
						for (let i = 0; i < jsonarr.length; i++) {
							let jsonarrs = ''; //定义模板之外字符串
							if (jsonarr[i].indexOf('<%=') > 0 && this.trim(jsonarr[i].substring(0, jsonarr[i].indexOf(
									'<%='))) != '') {
								jsonarrs = this.trim(jsonarr[i].substring(0, jsonarr[i].indexOf('<%=')));
							}
							//获取模板字符串
							jsonarr[i] = jsonarr[i].substring(jsonarr[i].indexOf('<%=') + 3, jsonarr[i].length);
							//模板内容
							let cont = jsonarr[i];
							//执行模板
							if (cont != '') {
								arrs = arrs + jsonarrs + eval(arr + cont);
							}
						}
					}
				} else {
					let title = m.substring(0, m.indexOf('<%='))
					//模板内容
					let textCont = m.substring(m.indexOf('<%=') + 3, m.indexOf('%>'));
					arrs = title + eval(arr + textCont);
				}
				return arrs;
			},
			trim(s) {
				let str = s.replace(/[\'\"\\\/\b\f\n\r\t]/g, '')
				return str.replace(/(^\s*)|(\s*$)/g, "");
			},
			calcEditorValue(editor) {
				if (editor && editor.computed) {
					return this.formPage[editor.computed]()
				} else if (editor.nameField || editor.valueField) {
					return this.formdata[editor.nameField || editor.valueField]
				} else {
					return ""
				}
			},
			tranferTitle(editor) {
				if (editor.min || editor.max) {
					if (this.formdata[editor.valueField]) {
						return editor.title + "[" + this.formdata[editor.valueField].length + "]";
					} else {
						return editor.title;
					}
				} else {
					return editor.title
				}
			},
			boolShowClear(editor) {
				if (editor.showClear === false) {
					return false
				} else {
					var value = this.formdata[editor.valueField];
					return this.boolEdit(editor) && (hasValue(value) && value != "")
				}
			},
			boolCheckedit(editor) { //是否审核时可改
				return this.formPage.checkedit && editor.checkedit;
			},
			//是否可以编辑
			boolEdit(editor) {
				return (!this.formPage.checkedit && (!this.formPage.edit || !editor.editReadonly)) || editor.checkedit;
			},
			//是否可以编辑
			boolEditSub(editor) {
				return (this.boolEdit(editor) && editor.showAdd) || editor.hasSubToolbarOnCheck;
			},
			//是否可以编辑
			boolDelSub(editor, subData) {
				if (subData.showDel !== undefined && subData.showDel.toString) {
					return (this.boolEdit(editor) && subData.showDel) || editor.hasSubToolbarOnCheck;
				} else {
					return (this.boolEdit(editor) && editor.showDel) || editor.hasSubToolbarOnCheck;
				}
			},
			getCol(editor) {
				var col = 7;
				if (editor.prefix) {
					col -= parseInt(editor.prefixCol || 1)
				}
				if (editor.suffix) {
					col -= parseInt(editor.suffixCol || 1)
				}
				return col
			},
			initData() {
				this.configData = this._.cloneDeep(this.initConfigData)
				this.setInitValue()
			},
			/**
			 * 初始化数据
			 */
			init() {
				let _that = this
				let dataMap = {}
				this.configData.forEach(obj => {
					let editors = {}
					obj.editors.forEach(el => {
						editors[el.valueField] = el
						if (el.nameField) {
							if (!hasValue(_that.formdata[el.nameField])) {
								if (el.defaultName || el.defaultName == 0) {
									_that.$set(_that.formdata, el.nameField, el.defaultName)
									_that.$set(_that.formPage.formdata, el.nameField, el.defaultName)
								} else {
									_that.$set(_that.formdata, el.nameField, "")
									_that.$set(_that.formPage.formdata, el.nameField, "")
								}
							}
						}
						if (el.valueField) {
							if (!hasValue(_that.formdata[el.valueField])) {
								if (el.defaultValue || el.defalutValue == 0) {
									_that.$set(_that.formdata, el.valueField, el.defaultValue)
									_that.$set(_that.formPage.formdata, el.valueField, el.defaultValue)
								} else {
									_that.$set(_that.formdata, el.valueField, "")
									_that.$set(_that.formPage.formdata, el.valueField, "")
								}
							}
						}
						var obj = _that.pickerData[el.valueField]
						if (!obj) {
							obj = {}
						}
						switch (el.type) {
							case 'datetimebox':
								if (!hasValue(obj.dateTime)) {
									let dateObj = dateTimePicker.dateTimePicker(dateTimePicker
									.getNewYear() - 1, dateTimePicker.getNewYear() +
										1, (_that.formdata[el.valueField] || _that.initValue[el
											.valueField]));
									dateObj.dateTime.pop();
									dateObj.dateTimeArray.pop();
									if (!el.noInitDate) {
										_that.formdata[el.valueField] = dateTimePicker.formatterDate(
											dateObj.dateTimeArray, dateObj.dateTime, 4);
									}
									_that.$set(_that.pickerData, el.valueField, dateObj);
								}
								break;
							case 'selectbox':
								if (!hasValue(obj.index)) {
									if (el.data.length && el.defaultValue) {
										for (var i = 0; i < el.data.length; i++) {
											var e = el.data[i]
											if (e.value == el.defaultValue) {
												obj.index = i;
												break
											}
										}
										if (!hasValue(obj.index)) {
											obj.index = 0;
										}
									} else {
										if (el.data.length == 2 && !el.onSelect && el.required && !_that
											.formdata[el.valueField]) {
											obj.index = 1;
											_that.formdata[el.valueField] = el.data[1].value
											_that.formdata[el.nameField] = el.data[1].text
											// if(el.onSelect) {
											// 	_that.formPage[el.onSelect](el.data[obj.index].attr)
											// }
										} else {
											obj.index = 0;
										}
									}
									_that.$set(_that.pickerData, el.valueField, obj);
								}
								break;
							case "multipicker":
								if (!hasValue(obj.index)) {
									obj.index = [0, 0, 0]
									_that.$set(_that.pickerData, el.valueField, obj);
								}
								break;
							case "filebox":
								_that.$nextTick(function() {
									var loginUserStore = useLoginUserStore();
									this.option = {
										// #ifdef APP-PLUS
										cuWebview: this.$mp.page.$getAppWebview(), // app必传 
										// #endif
										url: this.om.getUrl(
											"uploadFileData/uploadInterimFile"), //替换为你的接口地址
										name: 'file', // 附件key
										size: 10, // 附件上传大小上限(M)，默认10M
										debug: true,
										//根据你接口需求自定义请求头
										header: {
											'Authorization': loginUserStore.token
										},
										//根据你接口需求自定义body参数
										formData: {
											'key': this.formPage.fileKey
										}
									};
								})
								break;
						}
					});
					dataMap[obj.key] = editors
				});
				if (Object.keys(dataMap).length !== 0) {
					this.dataMap = dataMap
					_that.$emit("loaded")
				}
			},
			setInitValue() {
				// 如果传了初始值进行赋值
				if (this.initValue && this.initValue != {}) {
					for (var e in this.initValue) {
						if (!this.formdata.hasOwnProperty(e)) {
							this.$set(this.formdata, e, this.initValue[e])
							this.$set(this.formPage.formdata, e, this.initValue[e])
						} else {
							this.formdata[e] = this.initValue[e]
						}
					}
				}
			},
			/**
			 * 配置组属性赋值
			 * @param {Object} key 分组key值
			 * @param {Object} configKey 配置项的key
			 * @param {Object} newValue   新值
			 */
			changeConfigAttr(key, configKey, newValue) {
				this.configData.filter(e => e.key == key).forEach(e => {
					e[configKey] = newValue
				})
				this.$forceUpdate()
			},

			/**
			 * 判断是否存在对应分组
			 * @param {Object} key
			 * @param {Object} valueField
			 */
			hasGroupKey(key) {
				if (!this.dataMap[key]) {
					return false;
				}
				return true;
			},
			getGroupTitle(key) {
				let group = this.configData.filter(e => e.key == key)
				return group[0].title
			},
			/**
			 * 判断是否存在对应的编辑器
			 * @param {Object} key
			 * @param {Object} valueField
			 */
			hasEditor(key, valueField) {
				if (!this.dataMap[key]) {
					return false;
				}
				var editor = this.dataMap[key][valueField]
				if (editor) {
					return true;
				} else {
					return false;
				}
			},
			/**
			 * 获取编辑器标题
			 * @param {Object} key 分组key值
			 * @param {Object} valueField 组件对应的值字段
			 */
			getEditorTitle(key, valueField) {
				if (!this.dataMap[key]) {
					return ""
				}
				if(valueField){
					var editor = this.dataMap[key][valueField]
					if (editor) {
						return editor.title
					} else {
						return ""
					}
				}else{
					var items  = this.configData.filter(e=> e.key == key)
					if (items && items.length > 0) {
						return items[0].title
					} else {
						return ""
					}
				}
				
			},
			/**
			 * 获取编辑器
			 * @param {Object} key 分组key值
			 * @param {Object} valueField 组件对应的值字段
			 */
			getEditor(key, valueField) {
				if (!this.dataMap[key]) {
					return {}
				}
				return this.dataMap[key][valueField]
			},
			/**
			 * @param {Object} key 分组key值
			 * @param {Object} valueField 组件对应的值字段
			 * @param {Object} editorKey  改变组件属性的key 或者 对象{data:[],valueField:"id"},将忽略newValue
			 * @param {Object} newValue   新值
			 */
			changeEditor(key, valueField, editorKey, newValue) {
				if (!this.dataMap[key]) {
					return false
				}
				if (!this.dataMap[key][valueField]) {
					return false
				}
				var editor = this.dataMap[key][valueField]
				if (typeof(editorKey) == 'string') {
					editor[editorKey] = newValue
					this.$forceUpdate()
					return true
					//}else if(editorKey instanceof Object){
				} else if (Object.prototype.toString.call(editorKey) === '[object Object]') {
					for (var e in editorKey) {
						editor[e] = editorKey[e]
					}
					this.$forceUpdate()
					return true
				}
				this.$forceUpdate()
				return false
			},
			getFileEditor() {
				var fileEditors = []
				for (var key in this.dataMap) {
					for (var valueField in this.dataMap[key]) {
						if (this.dataMap[key][valueField].type == "imagebox" || this.dataMap[key][valueField].type ==
							"filebox") {
							fileEditors.push(this.dataMap[key][valueField])
						}
					}
				}
				return fileEditors;
			},
			initSelectIndex(key, valueField, value) {
				if (!value) {
					value = this.formdata[valueField]
				}
				var editor = this.getEditor(key, valueField);
				if (editor && editor.data && editor.data.length) {
					if (value) {
						var index = 0
						for (var i = 0; i < editor.data.length; i++) {
							if (editor.data[i].value == value || editor.data[i].value == value.toString()) {
								index = i
								break
							}
						}
						var pickerData = this.pickerData[editor.valueField]
						if (pickerData) {
							pickerData.index = index
						} else {
							this.pickerData[editor.valueField] = {
								index: index
							}
						}
						this.formdata[valueField] = value
						if (editor.nameField) {
							this.formdata[editor.nameField] = editor.data[index].text
						}
					} else {
						this.pickerData[editor.valueField] = {
							index: 0
						}
					}
				}
			},
			//初始化日期时间控件
			initDataTime(key, valueField) {
				var value = this.formdata[valueField] || this.initValue[valueField]
				if (!value) {
					return
				}
				var editor = this.getEditor(key, valueField);
				if (editor) {
					var pickerData = this.pickerData[editor.valueField]
					if (!pickerData) {
						pickerData = dateTimePicker.dateTimePicker(dateTimePicker.getNewYear() - 1, dateTimePicker
							.getNewYear() + 1, this
							.formdata[valueField]);
						pickerData.dateTime.pop();
						pickerData.dateTimeArray.pop();
						_that.$set(_that.pickerData, editor.valueField, pickerData);
					} else {
						let dateTime = dateTimePicker.getDateArry(pickerData.dateTimeArray, value);
						pickerData.dateTime = dateTime
					}
				}
			},
			/**
			 * 清空某一分组标题下的所有值，可外部调用
			 * @param {Object} key
			 */
			clearGroup(key) {
				if (!this.dataMap[key]) {
					return
				}
				var group = this.dataMap[key]
				for (var k in group) {
					var editor = group[k]
					if (!editor) {
						return
					}
					this.clearByEditor(editor)
				}
				this.$forceUpdate()
			},
			/**
			 * 清空某一项值，可外部调用
			 * @param {Object} key
			 * @param {Object} valueField
			 */
			clear(key, valueField) {
				if (!this.dataMap[key]) {
					return
				}
				var editor = this.dataMap[key][valueField]
				if (!editor) {
					return
				}
				this.clearByEditor(editor)
			},
			//本组件内调用
			clearByEditor(editor) {
				var pickerData = this.pickerData[editor.valueField]
				if (pickerData) {
					pickerData.index = 0
				}
				this.formdata[editor.valueField] = ""
				if (editor.nameField) {
					this.formdata[editor.nameField] = ""
				}
			},
			//本组件内调用
			clearFunc(editor) {
				if (!this.formdata[editor.valueField]) {
					return
				}
				if (editor.clearFunc) {
					this.formPage[editor.clearFunc]()
				} else {
					this.clearByEditor(editor)
				}
			},
			insertAfterEditorArr(key, afterValueField, editorArr) {
				if (Object.keys(this.dataMap).length == 0) {
					this.init()
				}
				var group = this.dataMap[key]
				if (!group) {
					return false
				}
				var editors = [];
				for (var i = 0; i < this.configData.length; i++) {
					if (this.configData[i].key == key) {
						editors = this.configData[i].editors
						break;
					}
				}
				var insertIndex = -1;
				for (var i = 0; i < editors.length; i++) {
					var tempEditor = editors[i]
					if (tempEditor.valueField == afterValueField) {
						insertIndex = i
						break
					}
				}
				if (~insertIndex) {
					if (insertIndex + 1 < editors.length) {
						for (let index in editorArr) {
							editors.splice(insertIndex + 1 + Number(index), 0, editorArr[index]);
							group[editorArr[index].valueField] = editorArr[index]
						}
					} else {
						for (let editor of editorArr) {
							editors.push(editor)
							group[editor.valueField] = editor
						}
					}
				}
				this.$forceUpdate()
			},
			/**
			 * 插入编辑器
			 * @param {Object} key 分组key
			 * @param {Object} afterValueField 插入点的上一个编辑器 field
			 * @param {Object} editor 要插入的编辑器
			 */
			insertAfterEditor(key, afterValueField, editor) {
				var group = this.dataMap[key]
				if (!group) {
					return false
				}
				var editors = [];
				for (var i = 0; i < this.configData.length; i++) {
					if (this.configData[i].key == key) {
						editors = this.configData[i].editors
						break;
					}
				}
				var insertIndex = -1;
				for (var i = 0; i < editors.length; i++) {
					var tempEditor = editors[i]
					if (tempEditor.valueField == afterValueField) {
						insertIndex = i
						break
					}
				}
				if (~insertIndex) {
					if (insertIndex + 1 < editors.length) {
						editors.splice(insertIndex + 1, 0, editor);
					} else {
						editors.push(editor)
					}
					group[editor.valueField] = editor
				}
			},
			/**
			 * 插入编辑器
			 * @param {Object} key 分组key
			 * @param {Object} valueField 要删除的 field
			 */
			removeEditor(key, valueField) {
				var group = this.dataMap[key]
				if (!group) {
					return false
				}
				var editors = [];
				for (var i = 0; i < this.configData.length; i++) {
					if (this.configData[i].key == key) {
						editors = this.configData[i].editors
						break;
					}
				}
				var removeIndex = -1;
				for (var i = 0; i < editors.length; i++) {
					var tempEditor = editors[i]
					if (tempEditor.valueField == valueField) {
						removeIndex = i
						break
					}
				}
				if (~removeIndex) {
					editors.splice(removeIndex, 1);
				}
			},
			textInput(e) {
				var name = e.currentTarget.dataset.name
				var verifyfunc = e.currentTarget.dataset.verifyfunc
				var value = e.target.value
				if (verifyfunc) {
					var ret = this.formPage[verifyfunc](value)
					if (typeof(ret) == "boolean") {
						if (!ret) {
							this.formdata[name] = ""
							return
						}
					} else if (typeof(ret) == "string") {
						this.om.toast(ret)
						this.formdata[name] = ""
						return
					}
				}
				var onselect = e.currentTarget.dataset.onselect
				if (onselect && hasValue(value)) {
					this.formPage[onselect](value)
				}
			},
			numberInput(e) {
				this.isfocus = false
				var name = e.currentTarget.dataset.name
				var min = e.currentTarget.dataset.min
				var max = e.currentTarget.dataset.max
				var precision = e.currentTarget.dataset.precision
				var verifyfunc = e.currentTarget.dataset.verifyfunc
				var value = e.target.value
				if (verifyfunc) {
					var ret = this.formPage[verifyfunc](value)
					if (typeof(ret) == "boolean") {
						if (!ret) {
							this.formdata[name] = ""
							return
						}
					} else if (typeof(ret) == "string") {
						this.om.toast(ret)
						this.formdata[name] = ""
						return
					}
				}

				if (hasValue(value)) {
					if (min || (min != undefined && min != null && min != "")) {
						if (value < this._.toNumber(min)) {
							this.formdata[name] = this._.toNumber(min)
						}
					}
					if (max || (max != undefined && max != null && max != "")) {
						if (value > this._.toNumber(max)) {
							this.formdata[name] = this._.toNumber(max)
						}
					}
					if (precision || (precision != undefined && precision != null && precision != "")) {
						this.formdata[name] = this._.round(value, this._.toNumber(precision))
					}
					var onselect = e.currentTarget.dataset.onselect
					if (onselect) {
						this.formPage[onselect](value)
					}
				}
			},
			/*
			tips 显示控制
			*/
			changeShow(e) {
				this.isfocus = true
			},

			/**
			 * 单选控件
			 */
			selectChange(e) {
				var key = e.currentTarget.dataset.key
				var name = e.currentTarget.dataset.name
				var verifyfunc = e.currentTarget.dataset.verifyfunc
				var onselect = e.currentTarget.dataset.onselect
				var obj = this.pickerData[name]
				if (!obj) {
					this.om.toast("error")
					return
				}
				var index = e.detail.value
				obj.index = index
				var editor = this.dataMap[key][name];
				if (index == 0) {
					this.clearByEditor(editor)
					return
				}
				if (verifyfunc) {
					var ret = this.formPage[verifyfunc](editor.data[index].attr)
					if (typeof(ret) == "boolean") {
						if (!ret) {
							return
						}
					} else if (typeof(ret) == "string") {
						this.om.toast(ret)
						return
					}
				}
				this.$set(this.pickerData, name, obj);
				this.formdata[name] = editor.data[index].value
				if (editor.nameField) {
					this.formdata[editor.nameField] = editor.data[index].text
				}
				if (onselect && this.formPage[onselect]) {
					this.formPage[onselect](editor.data[index].attr ? editor.data[index].attr : editor.data[index])
				}
			},
			multiChange(e, data) {
				let _that = this
				let key = e.currentTarget.dataset.key
				let name = e.currentTarget.dataset.name
				let editor = this.dataMap[key][name];
				this.formdata[name] = editor.data[data.length - 1][e.detail.value[data.length - 1]].value
				if (editor.nameField) {
					this.formdata[editor.nameField] = editor.data[data.length - 1][e.detail.value[data.length - 1]].text
				}
			},
			initSelectVal(key, valueField, index) {
				let _that = this
				if (Object.keys(this.dataMap).length == 0) {
					this.init()
				}
				for (let item of _that.configData) {
					if (item.key == key) {
						item.editors.forEach(el => {
							if (Object.prototype.toString.call(el.data) == "[object Array]" && el.data.length <
								2) {
								return
							}
							let dats = _that.pickerData[el.valueField]
							if (!dats) {
								dats = {}
							}
							if (el.valueField == valueField) {
								if (index) { //默认选中序号
									dats.index = index;
									_that.formdata[el.valueField] = el.data[index].value
									_that.formdata[el.nameField] = el.data[index].text
								} else {
									dats.index = 1;
									_that.formdata[el.valueField] = el.data[1].value
									_that.formdata[el.nameField] = el.data[1].text
								}
								if (el.onSelect) {
									if (index) { //默认选中序号
										_that.formPage[el.onSelect](el.data[index].attr)
									} else {
										_that.formPage[el.onSelect](el.data[1].attr)
									}
								}
							}
							_that.$set(_that.pickerData, el.valueField, dats);
						})
					} else {
						continue
					}
				}
			},
			selectInput(editor) { //可输可选
				var onselect = editor.onSelect
				if (onselect && this.formPage[onselect]) {
					this.formPage[onselect](this.formdata[editor.valueField])
				}
			},
			/**
			 * 判断控件
			 */
			switchChange(e) {
				var name = e.currentTarget.dataset.name
				this.formdata[name] = e.detail.value
				this.$emit("switchChange", e.detail.value, name)
			},
			/**
			 * 日期控件
			 */
			dateChange(e, etitor, formdata) {
				var name = e.currentTarget.dataset.name
				var verifyfunc = e.currentTarget.dataset.verifyfunc
				var onselect = e.currentTarget.dataset.onselect
				if (verifyfunc) {
					var ret = this.formPage[verifyfunc](e.detail.value)
					if (typeof(ret) == "boolean") {
						if (ret) {
							this.formdata[name] = e.detail.value
						} else {
							return
						}
					} else if (typeof(ret) == "string") {
						this.om.toast(ret)
						return
					}
				} else {
					this.formdata[name] = e.detail.value
				}
				if (onselect) {
					this.formPage[onselect](e.detail.value)
				}
			},
			/**
			 * 时间控件
			 */
			timeChange(e, name) {
				for (let item of this.$refs.timePicker) {
					if (item.$attrs['data-name'] == name) {
						let name = item.$attrs['data-name']
						let verifyfunc = item.$attrs['data-verifyfunc']
						let onselect = item.$attrs['data-onselect']
						if (verifyfunc) {
							var ret = this.formPage[verifyfunc](e)
							if (typeof(ret) == "boolean") {
								if (ret) {
									this.formdata[name] = e
								} else {
									return
								}
							} else if (typeof(ret) == "string") {
								this.om.toast(ret)
								return
							}
						} else {
							this.formdata[name] = e
						}
						if (onselect) {
							this.formPage[onselect](e)
						}
					}
				}
			},
			/**
			 * 日期时间控件
			 */
			datetimeChange(e) {
				var name = e.currentTarget.dataset.name
				var verifyfunc = e.currentTarget.dataset.verifyfunc
				var onselect = e.currentTarget.dataset.onselect
				var datetime = dateTimePicker.formatterDate(this.pickerData[name].dateTimeArray, e.detail.value, 4);
				if (verifyfunc) {
					var ret = this.formPage[verifyfunc](datetime)
					if (typeof(ret) == "boolean") {
						if (ret) {
							this.formdata[name] = datetime;
							this.pickerData[name].dateTime = e.detail.value
						} else {
							return
						}
					} else if (typeof(ret) == "string") {
						this.om.toast(ret)
						return
					}
				} else {
					this.formdata[name] = datetime;
					this.pickerData[name].dateTime = e.detail.value
				}
				if (onselect) {
					this.formPage[onselect](datetime)
				}
			},
			datetimecolumnchange(editor) {
				let dateTime = this.pickerData[editor.currentTarget.dataset.name].dateTime
				let dateTimeArray = this.pickerData[editor.currentTarget.dataset.name].dateTimeArray
				let year = dateTimeArray[0][dateTime[0]]
				let month = dateTimeArray[1][dateTime[1]]
				if (editor.detail.column === 1) {
					month = dateTimeArray[1][editor.detail.value]
					this.changeDate.month = dateTimeArray[1][editor.detail.value]
				} else if (editor.detail.column === 0) {
					year = dateTimeArray[0][editor.detail.value]
					this.changeDate.year = dateTimeArray[0][editor.detail.value]
				} else {
					year = moment(new Date()).format('YYYY');
					month = moment(new Date()).format('MM');
				}

				if (this.changeDate.year && this.changeDate.year != '' && year != this.changeDate.year) {
					year = this.changeDate.year
				}
				if (this.changeDate.month && this.changeDate.month != '' && month != this.changeDate.month) {
					month = this.changeDate.month
				}
				if (!hasValue(year)) {
					year = moment(new Date()).format('YYYY');
				}
				if (!hasValue(month)) {
					month = moment(new Date()).format('MM');
				}
				let days = moment(year + '-' + month, "YYYY-MM").daysInMonth()
				let dayArr = []
				for (let i = 1; i <= days; i++) {
					if (i < 10) {
						dayArr.push('0' + i)
					} else {
						dayArr.push('' + i)
					}
				}
				this.$set(this.pickerData[editor.currentTarget.dataset.name].dateTime, editor.detail.column, editor.detail
					.value)
				this.$set(this.pickerData[editor.currentTarget.dataset.name].dateTimeArray, 2, dayArr)
			},
			clearDatetime(editor) {
				if (editor.clearFunc) {
					this.formPage[editor.clearFunc]()
				} else {
					this.pickerData[editor.valueField].dateTime = []
					this.formdata[editor.valueField] = ""
				}
			},
			multiselectClick(e) {
				var key = e.currentTarget.dataset.key
				var name = e.currentTarget.dataset.name
				var obj = this.dataMap[key][name]
				if (!obj) {
					this.om.toast("error")
					return
				}
				if (!this.boolEdit(obj)) {
					return
				}
				if (obj.verifyfunc) {
					var ret = this.formPage[obj.verifyfunc](e.detail.value)
					if (typeof(ret) == "boolean") {
						if (ret) {
							if (this.formPage.formdata[name]) {
								if (obj.initSelect) {
									uni.setStorage({
										key: obj.linkParam.cachename,
										data: obj.initSelect
									})
								}
							}
							var url = getUrl("/pages/public/multiSearch/multiSearch", obj.linkParam)
							uni.navigateTo({
								url: url
							})
						} else {
							return
						}
					} else if (typeof(ret) == "string") {
						this.om.toast(ret)
						return
					}
				} else {
					if (this.formPage.formdata[name]) {
						if (obj.initSelect) {
							uni.setStorage({
								key: obj.linkParam.cachename,
								data: obj.initSelect
							})
						}
					}
					var url = getUrl("/pages/public/multiSearch/multiSearch", obj.linkParam)
					uni.navigateTo({
						url: url
					})
				}
			},
			multiselectConfirm(e) {
				this.formdata[e.valueField] = e.value.join(',')
				this.formdata[e.nameField] = e.title
			},
			linkFunc(e) {
				var key1 = e.currentTarget.dataset.key
				var name = e.currentTarget.dataset.name
				var value = e.currentTarget.dataset.value
				var obj = this.dataMap[key1][name]
				if (!obj) {
					this.om.toast("error")
					return
				}
				if (!this.boolEdit(obj)) {
					return
				}
				if (obj.linkParam) {
					if (obj.max) {
						obj.linkParam.max = obj.max
					}
				}
				if (obj.verifyfunc) {
					var ret = this.formPage[obj.verifyfunc](e.detail.value)
					if (typeof(ret) == "boolean") {
						if (ret) {
							if (obj.linkParam && obj.linkParam.isNew && obj.linkParam.defaultDataCache) {
								let list = []
								if (this.formdata[name]) {
									let idStr = this.formdata[name] + ''
									let userIds = idStr.split(',')
									let userNames = this.formdata[value].split(',')
									for (let userIndex in userIds) {
										let user = {
											id: userIds[userIndex],
											username: userNames[userIndex],
										}
										list.push(user)
									}
								}
								uni.setStorage({
									key: obj.linkParam.defaultDataCache,
									data: list
								})
							}
							var url = getUrl(obj.link, obj.linkParam)
							uni.navigateTo({
								url: url
							})
						} else {
							return
						}
					} else if (typeof(ret) == "string") {
						this.om.toast(ret)
						return
					}
				} else if (obj.isSearchUser) {
					if (obj.linkParam && obj.linkParam.isNew && obj.linkParam.defaultDataCache) {
						let list = []
						if (this.formdata[name]) {
							let idStr = this.formdata[name] + ''
							let userIds = idStr.split(',')
							let userNames = this.formdata[value].split(',')
							for (let userIndex in userIds) {
								let user = {
									id: userIds[userIndex],
									username: userNames[userIndex],
								}
								list.push(user)
							}
						}
						uni.setStorage({
							key: obj.linkParam.defaultDataCache,
							data: list
						})
					}
					var url = getUrl(obj.link, obj.linkParam)
					uni.navigateTo({
						url: url
					})
				} else {
					var url = getUrl(obj.link, obj.linkParam)
					uni.navigateTo({
						url: url
					})
				}
			},
			labelLink(key, editor) {
				if (obj.verifyLink) {
					this.formPage[obj.verifyLink](obj)
				}
			},
			openFile(editor, index) {
				let _that = this
				if (editor.isText) {
					var url = getUrl("/pages/public/editRemark/editRemark", {
						remark: editor.remark,
						fieldname: editor.nameField,
						disabled: editor.disabled,
						showClear: editor.showClear
					})
					uni.navigateTo({
						url: url,
					})
				} else if (this.formPage.edit && !this.newUpload && editor.valueField == 'bottomFileUpload') {
					let item = {}
					uni.getStorage({
						key: 'bottomFileListCache',
						success: (res) => {
							if (res.data) {
								item = res.data[0]
							}
						}
					})
					if (item.fileUrl) {
						uni.navigateTo({
							url: "/pages/public/filetable/filetable?fileUrl=" + encodeURIComponent(item.fileUrl)
						})
					} else {
						if (!item.multiFile && item.fileName && item.fileName.endsWith("pdf")) {
							this.om.openPdf(item)
						} else {
							let subId = '',
								simpleClazzName = '',
								fileId = '',
								fieldId = '';
							if (item.attr) {
								if (item.attr.subId)
									subId = item.attr.subId
								if (item.attr.simpleClazzName)
									simpleClazzName = item.attr.simpleClazzName
								if (item.attr.fileId)
									fileId = item.attr.fileId
								if (item.attr.fieldId)
									fieldId = item.attr.fieldId
							}
							uni.navigateTo({
								url: "/pages/public/filetable/filetable?busCode=" + _that.formPage.busCode +
									"&mainId=" + _that.formdata.id + "&subId=" +
									subId + "&simpleClazzName=" + simpleClazzName + "&fileId=" + fileId +
									"&fieldId=" + fieldId
							})
						}
					}
				} else {
					if (editor.type == 'lookfilebox') {
						uni.navigateTo({
							url: "/pages/public/filetable/filetable?busCode=" + editor.busCode + "&mainId=" +
								editor.formId + "&subId=" +
								editor.subId + "&simpleClazzName=" + editor.simpleClazzName
						})
					} else {
						let obj = {
							attr: {
								fileId: '',
								busCode: ''
							},
							fileUplaodKey: ''
						}
						let item = this.formdata[editor.nameField][index]
						if (index + '') {
							if (item.id) {
								obj.attr.fileId = item.id
							}
							if (this.formdata.busCode) {
								obj.attr.busCode = this.formdata.busCode
							}
							if (item.filePathKey) {
								obj.fileUplaodKey = item.filePathKey
							}
						}
						if (item.fileName.endsWith("pdf")) {
							this.om.openPdf(obj)
						} else {
							uni.navigateTo({
								url: "/pages/public/filetable/filetable?lookFile=" + true
							})
						}
					}
				}
			},
			showLookBtn(valueField, nameField) {
				var files = this.formdata[valueField] || this.formdata[nameField]
				//if(files instanceof Array){
				if (Object.prototype.toString.call(files) === '[object Array]') {
					return files.length > 0
				} else {
					return hasValue(files, true)
				}
				this.$forceUpdate()
			},
			avaLookBtn(valueField, nameField) {
				var files = this.formdata[valueField] || this.formdata[nameField]
				//if(files instanceof Array){
				if (Object.prototype.toString.call(files) === '[object Array]') {
					return true
				} else {
					return hasValue(files, true)
				}
				this.$forceUpdate()
			},
			editRemark(editor) {
				if (this.boolEdit(editor)) {
					var value = ""
					if (hasValue(this.formdata[editor.valueField])) {
						value = this.formdata[editor.valueField]
					}
					var url = getUrl('/pages/public/editRemark/editRemark', {
						fieldname: editor.valueField,
						title: editor.title,
						max: editor.max,
						disabled: editor.disabled,
						isref: true,
						remark: value,
						showClear: editor.showClear,
						placeholder: editor.placeholder
					})
					uni.navigateTo({
						url: url
					})
				}
			},
			//可输可选
			editSearchRemark(editor) {
				if (editor.verifyfunc) {
					let verifyfunc = this.formPage[editor.verifyfunc]
					if (!verifyfunc()) {
						return
					}
				}
				if (this.boolEdit(editor)) {
					var query = {
						fieldname: editor.valueField,
						title: editor.title,
						max: editor.max,
						isref: true,
						remark: this.formdata[editor.valueField]
					}
					if (editor.linkParam) {
						Object.assign(query, editor.linkParam)
					}
					var url = getUrl('/pages/public/editSearch/editSearch', query)
					uni.navigateTo({
						url: url
					})
				}
			},
			getImageUrl(fileUrl, editor) {
				if (fileUrl && fileUrl.endsWith("pdf")) {
					return '/static/images/others/pdf.svg';
				} else {
					if (editor.fileUrlList.includes(fileUrl)) {
						return this.om.getUrl((editor.loadUrl || "uploadFileData/getInterimFile") + ".do?fileName=" +
							fileUrl + "&key=" +
							editor.fileUploadKey)
					} else {
						return fileUrl;
					}
				}
			},
			changeAuth(){

			},
			ChooseImage(editor) {
				let _that = this
				let hasBlob = true
				for (let item of editor.tempFileList) {
					if (item.slice(0, 5) != 'blob:') {
						hasBlob = false
					}
				}
				if (!hasBlob && _that.formPage.edit) {
					confirmModal(_that, '提示信息', '修改时添加附件会覆盖当前附件是否继续', () => {
						editor.tempFileList = editor.tempFileList.filter(item => item.slice(0, 5) == 'blob:');
						
						// #ifdef H5
						uni.chooseImage({
							sizeType: ['original', 'compressed'],
							success: function(res) {
								editor.tempFileList = _that._.concat(editor.tempFileList, res.tempFilePaths);
							}
						});
						// #endif
						// #ifdef APP || APP-PLUS || APP-NVUE || APP-PLUS-NVUE || APP-VUE
						uni.showModal({
							title: '提示',
							content: '请选择相册选取或者拍照？',
							cancelText: "相册", 
							confirmText: "拍照",
							showCancel: true,
							success: (res) => {
								if(res.confirm) {  
									_that.permissionID = 'CAMERA'
									uni.chooseImage({
										sizeType: ['original', 'compressed'],
										sourceType: ['camera'],
										success: function(res) {
											editor.tempFileList = _that._.concat(editor.tempFileList, res.tempFilePaths);
										}
									});
									setTimeout(()=>{
										_that.$refs['authpup'].open();
									},500)
								} else if (res.cancel) {  
									_that.permissionID = 'WRITE_EXTERNAL_STORAGE'
									uni.chooseImage({
										sizeType: ['original', 'compressed'],
										sourceType: ['album'],
										success: function(res) {
											editor.tempFileList = _that._.concat(editor.tempFileList, res.tempFilePaths);
										}
									});
									setTimeout(()=>{
										_that.$refs['authpup'].open();
									},500)
								}  
							} 
						})
						// #endif
					}, () => {

					})
				} else {
					// #ifdef H5
					uni.chooseImage({
						sizeType: ['original', 'compressed'],
						success: function(res) {
							editor.tempFileList = _that._.concat(editor.tempFileList, res.tempFilePaths);
						}
					});
					// #endif
					// #ifdef APP || APP-PLUS || APP-NVUE || APP-PLUS-NVUE || APP-VUE
					uni.showModal({
						title: '提示',
						content: '请选择相册选取或者拍照？',
						cancelText: "相册", 
						confirmText: "拍照",
						showCancel: true,
						success: (res) => {
							if(res.confirm) {  
								_that.permissionID = 'CAMERA'
								uni.chooseImage({
									sizeType: ['original', 'compressed'],
									sourceType: ['camera'],
									success: function(res) {
										editor.tempFileList = _that._.concat(editor.tempFileList, res.tempFilePaths);
									}
								});
								setTimeout(()=>{
									_that.$refs['authpup'].open();
								},500)
							} else if (res.cancel) {  
								_that.permissionID = 'WRITE_EXTERNAL_STORAGE'
								uni.chooseImage({
									sizeType: ['original', 'compressed'],
									sourceType: ['album'],
									success: function(res) {
										editor.tempFileList = _that._.concat(editor.tempFileList, res.tempFilePaths);
									}
								});
								setTimeout(()=>{
									_that.$refs['authpup'].open();
								},500)
							}  
						} 
					})
					// #endif
				}
			},
			ViewImage(index, editor) {
				let _that = this
				if (editor.tempFileList[index].endsWith('.pdf')) {
					_that.openFile(editor, index)
				} else {
					var files = editor.tempFileList.map(e => {
						return _that.getImageUrl(e, editor)
					})
					uni.previewImage({
						urls: files,
						current: index
					});
				}
			},
			DelImg(index, editor) {
				let _that = this
				if (_that.formdata[editor.nameField].length > 0) {
					_that.formdata[editor.nameField].splice(index, 1)
				}
				editor.tempFileList.splice(index, 1)
			},
			openSubData(index, editor) {
				let _that = this
				// var checkRes = formValidation(this.configData, this.formdata);
				// if (checkRes) {
				// 	this.om.toast(checkRes);
				// } else {
				if (editor.verifyfunc) {
					var ret = this.formPage[editor.verifyfunc]()
					if (typeof(ret) == "boolean") {
						if (!ret) {
							return
						}
					} else if (typeof(ret) == "string") {
						this.om.toast(ret)
						return
					}
				}
				var subConfigData = this.formPage.subConfigData
				//if(subConfigData instanceof Array) {
				if (Object.prototype.toString.call(subConfigData) === '[object Array]') {
					uni.setStorage({
						key: editor.workConfigDataCacheKey,
						data: subConfigData
					});
				} else {
					uni.setStorage({
						key: editor.workConfigDataCacheKey,
						data: subConfigData[editor.groupKey]
					});
				}
				if (editor.workList === undefined) {
					editor.workList = new Array()
				}
				if (editor.workList.length) {
					uni.setStorage({
						key: editor.workCacheKey,
						data: editor.workList
					});
				}

				var param = {
					configDataCacheKey: editor.workConfigDataCacheKey,
					cachename: editor.workCacheKey,
					index: index,
					checkedit: _that.formPage.checkedit,
					edit: _that.formPage.edit
				};
				if (editor.getWorkParam) {
					if (this.formPage[editor.getWorkParam]) {
						var otherParam = this.formPage[editor.getWorkParam](index, editor)
						if (otherParam) {
							Object.assign(param, otherParam)
						}
					}
				}
				var url = getUrl(editor.link, param);
				uni.navigateTo({
					url: url
				});
				// }
			},
			delSubData(index, editor) {
				let _that = this
				//删除前验证
				confirmModal(_that,'提示信息','是否删除',()=>{
				if (_that.formPage.verifySubDel) {
					var ret = _that.formPage.verifySubDel(index, editor)
					if (typeof(ret) == "boolean") {
						if (!ret) {
							return
						}
					} else if (typeof(ret) == "string") {
						_that.om.toast(ret)
						return
					}
				}
				if (index != null) {
					editor.workList.splice(index, 1);
					//#ifdef APP-PLUS
					uni.removeStorage({
						key: getWorkCacheKey(editor.groupKey)
					});
					//#endif
				}
				if (editor.afterdel) {
					_that.formPage[editor.afterdel](editor)
				}
				},()=>{
					
				})
			},
			onUaSuccess(res, editor) {
				editor.fileList.push(this.om.getUrl(res.value.fileUrl))
				this.formdata[editor.valueField] = JSON.stringify({
					fileName: res.value.uploadName,
					fileSaveName: res.value.saveName
				})
			},
			onUaError(err, editor) {

			},
			onUaRemove(index, editor) {
				this.formdata[editor.valueField] = []
				editor.fileList.splice(index, 1)
			},
			onUaProcess(res, editor) {

			},
			checkboxChange(event, editor) {
				this.$emit('changeCheckBox', event, editor)
			},
			bindMultiPickerColumnChange(e, dataList) {
				this.multiIndex[e.detail.column] = e.detail.value
				let key = e.currentTarget.dataset.key
				let name = e.currentTarget.dataset.name
				let editor = this.dataMap[key][name];
				let v = dataList[e.detail.column][e.detail.value]
				if (v.children && v.children.length) {
					let arr = []
					for (let item of v.children) {
						arr.push({
							value: item[editor.initValueField],
							text: item[editor.initNameField],
							children: item.children,
							attr: item
						})
					}
					dataList[e.detail.column + 1] = arr
					if (v.children[0].children && v.children[0].children.length) {
						let arr1 = []
						for (let sitem of v.children[0].children) {
							arr1.push({
								value: sitem[editor.initValueField],
								text: sitem[editor.initNameField],
								children: sitem.children,
								attr: sitem
							})
						}
						dataList[e.detail.column + 2] = arr1
					}
				}
			},
			popchange() {},
			pickerClick() {
				this.$refs.popup[0].open()
			},
			pickerConfirm(e, editor) {
				if (editor.onSelect) {
					this.formPage[editor.onSelect](e[0], e[1])
				}
				this.$refs.popup[0].close()
			},
			pickerCancel() {
				this.$refs.popup[0].close()
			},
			uploadFileCallBack(e, valueField, nameField) {
				this.newUpload = true
				if (e.success) {
					if (e.responseText) {
						let response = JSON.parse(e.responseText)
						let fileItem = {
							uploadName: response.value.uploadName,
							fileName: response.value.uploadName,
							fileSaveName: response.value.saveName,
							fileUrl: response.value.fileUrl
						}
						if (!this.formdata[nameField]) {
							this.formdata[nameField] = []
							this.formdata[nameField].push(fileItem)
						} else {
							if (this.formPage.edit) {
								let flag = false
								for (let item of this.formdata[nameField]) {
									if (item.fileUrl) {
										flag = true
									}
								}
								if (!flag) {
									this.formdata[nameField] = []
									this.formdata[nameField].push(fileItem)
								} else {
									this.formdata[nameField].push(fileItem)
								}
							} else {
								this.formdata[nameField].push(fileItem)
							}
						}
						uni.setStorage({
							key: 'fileListCache',
							data: this.formdata[nameField]
						})
						this.$forceUpdate()
					}
				}
			},
			userItemClick(nameStr, idStr, index) {
				let nameList = [],
					idList = []
				nameList = this.formdata[nameStr].split(','),
					idList = (this.formdata[idStr] + '').split(',')
				for (let uIndex in nameList) {
					if (index == uIndex) {
						nameList.splice(index, 1)
						idList.splice(index, 1)
					}
				}
				this.formdata[idStr] = idList.map(e => e).join(',')
				this.formdata[nameStr] = nameList.map(e => e).join(',')
				this.$emit('deleteItem')
				this.$forceUpdate()
			},
			showAllUser(nameStr, idStr) {
				uni.navigateTo({
					url: '/pages/public/searchUser/showAllUser?name=' + nameStr + '&id=' + idStr
				})
			},
			//日期时间控件点击
			datetimeClick(editor) {
				this.dateTimeEditor = editor
				if(!this.boolEdit(editor) || this.boolCheckedit(editor)){
					return
				}
				this.formdata[this.dateTimeEditor.nameField || this.dateTimeEditor.valueField]
				switch (editor.type) {
					case 'newdatetimebox':
						this.$refs.datetimepop.open()
						return;
					case 'newdatebox':
						this.$refs.datepop.open()
						return;
					case 'newtimebox':
						this.$refs.timepop.open()
						return;
				}
			},
			dateTimeConfirm(e) {
				for (let item of this.configData) {
					for (let editor of item.editors) {
						if (editor.nameField == e[0].nameField) {
							this.formdata[editor.nameField] = e[1]
							if (editor.onSelect) {
								this.formPage[editor.onSelect](e[1])
							}
						}
					}
				}
				switch (e[0].type) {
					case 'newdatetimebox':
						this.$refs.datetimepop.close()
						return;
					case 'newdatebox':
						this.$refs.datepop.close()
						return;
					case 'newtimebox':
						this.$refs.timepop.close()
						return;
				}
			},
			dateTimeCancel(e) {
				switch (e.type) {
					case 'newdatetimebox':
						this.$refs.datetimepop.close()
						return;
					case 'newdatebox':
						this.$refs.datepop.close()
						return;
					case 'newtimebox':
						this.$refs.timepop.close()
						return;
				}
			},
			areaClick(e) {
				let otherEditor = JSON.parse(JSON.stringify(e))
				if (this.formdata[e.valueField]) {
					this.om.request(
						"regions/getResponse", {
							id: this.formdata[e.valueField]
						}
					).then(res => {
						if (res.value) {
							let data = res.value
							this.$set(otherEditor, 'addressMobileCityId', data.cityId || '')
							this.$set(otherEditor, 'addressMobileCityName', data.cityName || '')
							this.$set(otherEditor, 'addressMobileProvinceId', data.proviceId || '')
							this.$set(otherEditor, 'addressMobileProvinceName', data.proviceName || '')
							this.$set(otherEditor, 'addressName', data.countyName || '')
							this.$set(otherEditor, 'addressId', data.countyId || '')
						}
						this.areaEditor = otherEditor
						this.$refs.areapop.open()
					})
				} else {
					this.areaEditor = e
					this.$refs.areapop.open()
				}
			},
			areaSelected(e) {
				for (let item of this.configData) {
					for (let editor of item.editors) {
						if (editor.nameField == e[1].nameField) {
							this.$set(editor, 'addressMobileCityId', e[0][1] ? e[0][1].id : '')
							this.$set(editor, 'addressMobileCityName', e[0][1] ? e[0][1].title : '')
							this.$set(editor, 'addressMobileProvinceName', e[0][0] ? e[0][0].title : '')
							this.$set(editor, 'addressName', e[0][e[0].length - 1] ? e[0][e[0].length - 1].title : '')
							this.$set(editor, 'addressMobileProvinceId', e[0][0] ? e[0][0].id : '')
							this.$set(editor, 'addressId', e[0][e[0].length - 1] ? e[0][e[0].length - 1].id : '')
							if (editor.onSelect) {
								this.formPage[editor.onSelect](e[2])
							} else {
								if (editor.linkParam.fullName) {
									this.formdata[editor.nameField] = e[0][e[0].length - 1] ? e[0][e[0].length - 1]
										.fullName : ''
									this.formdata[editor.valueField] = e[0][e[0].length - 1] ? e[0][e[0].length - 1].id :
										''
								} else {
									this.formdata[editor.nameField] = e[0][e[0].length - 1] ? e[0][e[0].length - 1].title :
										''
									this.formdata[editor.valueField] = e[0][e[0].length - 1] ? e[0][e[0].length - 1].id :
										''
								}
							}
						}
					}
				}
				this.$refs.areapop.close()
			},
			areaCancle() {
				this.$refs.areapop.close()
			},
			areaOutsideClick(e) {
				let otherEditor = JSON.parse(JSON.stringify(e))
				this.$set(otherEditor, 'addressId', this.formdata[e.valueField] || '')
				this.areaOutsideEditor = otherEditor
				this.$refs.areaOutsidepop.open()
			},
			areaOutsideSelected(e) {
				for (let item of this.configData) {
					for (let editor of item.editors) {
						if (editor.nameField == e[1].nameField) {
							this.formdata[editor.nameField] = e[2].dicname || e[2].title
							this.formdata[editor.valueField] = e[2].id
						}
					}
				}
				this.$refs.areaOutsidepop.close()
			},
			areaOutsideCancle() {
				this.$refs.areaOutsidepop.close()
			},
			countryClick(e){
				this.countryList = e.data
				this.showCountry = true
				this.$refs.ottree._show();
			},
			countryCancel(){
				this.showCountry = false
			},
			countryConfirm(){
				this.showCountry = false
			},
			textareaInput(e, editor) {
				this.formPage.formdata[editor.nameField || editor.valueField] = e.detail.value
			},
			routerTo(editor) {
				let url = getUrl(editor.url, editor.param)
				uni.navigateTo({
					url: url
				})
			},
			buttonLink(item) {
				let _that = this
				if (item.verifyLink) {
					let ret = this.formPage[item.verifyLink]()
					if (ret) {
						if (item.buttonLink) {
							uni.navigateTo({
								url: item.buttonLink
							})
						}
					}
				} else {
					if (item.buttonLink) {
						uni.navigateTo({
							url: item.buttonLink
						})
					}
				}
			},
			watchInput(e,editor){
				let that = this
				if(!editor.precision){
					editor.precision = 4
				}
				let reg = new RegExp('^\\d*(\\.?\\d{0,'+editor.precision+'})'); 
				e.target.value = (e.target.value.match(reg)[0]) || null
				if(editor.watchInput){
					this.formPage[editor.watchInput](e.target.value)
				}
				that.$nextTick(() => {
					that.formdata[editor.valueField]= e.target.value
				})
			},
			textareaBlur(editor){
				let _that = this
				if(editor.onSelect){
					_that.formPage[editor.onSelect](this.formdata[editor.valueField])
				}
			},
		}
	};
</script>

<style>
	.numberbox-tips {
		width: 330px;
		border-radius: 6px;
		z-index: 99999;
		position: absolute;
		bottom: 60px;
		background-color: #3F3A36;
	}

	.numberbox-tips>.numberbox-container {
		width: 0;
		height: 0;
		border: 6px solid;
		border-color: #3F3A36 transparent transparent transparent;
		position: absolute;
		left: 50%;
		top: 100%;
	}

	.numberbox-tips>.numberbox-tips-text {
		text-align: center;
		line-height: 30px;
		color: #BDB8B4;
		font-size: 12px;
	}
	.showCountryPopup{
		position: fixed;
		top: 0px;
		left: 0px;
		right: 0px;
		bottom: 0px;
		z-index: 9998;
		background: #FFF;
		height: 100%;
	}
	
	.showCountryPopup .bar{
		background-color: #fff;
		height: 36px;
		padding-left: 10px;
		padding-right: 10px;
		display: flex;
		justify-content: space-between;
		align-items: center;
		box-sizing: border-box;
		border-bottom-width: 0.5px !important;
		border-bottom-style: solid;
		border-bottom-color: #f5f5f5;
		font-size: 16px;
		color: #757575;
		line-height: 1;
	}
</style>
